package dome2collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.function.Consumer;

public class test {
    public static void main(String[] args) {
        //目标：认识并发修改异常问题 搞清楚各种集合遍历的区别
        ArrayList<String> list=new ArrayList<>();
        list.add("人字拖");
        list.add("枸杞");
        list.add("八宝粥");
        list.add("黑枸杞");
        list.add("西洋参");


//        for (int i = 0; i < list.size(); i++) {
//            String s = list.get(i);
//            if(s.contains("枸杞")){//遍历过程中，删除元素
//
//                list.remove(s);//删除元素出现业务问题 为并发修改问题
//                i--;//删除数据后，索引--是每个元素都能遍历的到
//            }
//        }
        for(int i=list.size()-1;i>=0;i--) {//倒序遍历
            String s = list.get(i);
            if(s.contains("枸杞")){//遍历过程中，删除元素
                list.remove(s);//删除元素出现业务问题 为并发修改问题
            }
        }

        System.out.println(list);//[人字拖, 枸杞, 八宝粥, 洋参]

        //小结：三种遍历方式的区别：
        //1.for循环遍历，不能删除元素，但是可以修改元素
        //2.foreach循环遍历，不能修改元素，但是可以删除元素
        //3.迭代器遍历，既可以修改元素，又可以删除元素
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                if(s.contains("枸杞")) {
                    list.remove(s);
                }
                System.out.println(s);
            }
        });
        LinkedList<String> list1=new LinkedList<>();
        list1.add("人字拖");
        list1.add("枸杞");
        list1.add("八宝粥");
        list1.add("黑枸杞");
        list1.add("西洋参");
        System.out.print(list1);


    }
}
